In the operations of a computer system, it may be necessary to monitor, profile, trace, and debug applications. Such processes are necessary to develop computer applications, as well as to modify and maintain the applications. A computer application may be stored on a computer-readable medium.
Certain processes and tools are known for application development. In one example, certain languages, such as Java™, provides interfaces to attach agents for application monitoring. Such agents may provide for various different analysis functions. However, a major problem with such interface operations is that poor performance may result once an agent is activated. For this reason, such agents are not normally usable in a productive system, and thus are of limited use in the analysis of an application if actual operating conditions are required.
As an alternative, a developer may modify the code for analysis, such as by adding instrumentation either by source code modification, or, at a higher level, by byte code modification. These processes also have drawbacks. Such processes are inflexible and difficult to modify as needed. For example, any source code modifications will require recompilation if any changes are made or the instrumentation needs to be removed from the application, and the instrumentation generally cannot be added to unknown types of applications. Further, adequate performance of a system is not assured because these processes may still have significant impacts on operations. In one example, it may not be possible to anticipate whether added instrumentation will fall inside a frequently used application loop. Thus, the overall impact of such instrumentation on performance or output volume of an application under test may be unpredictable.